package com.flute.haflute.jobbox.base;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 非MapReduce的执行任务，所有子节点上真正进行计算的任务必须实现该接口
 * 
 * setInput 注入中心节点资源调度器
 * 
 * begin 开始任务
 * 
 * end 结束任务
 */
public interface CloudTask {

	/**
	 * 注入中心节点资源调度器
	 * 
	 * @param inputResource
	 *            资源调度器的接口
	 * @throws RemoteException
	 */
	public void setInput(InputResource inputResource) throws RemoteException;

	/**
	 * 注入中心节点的任务控制器（调度器）并进行本地配置
	 * 
	 * @param messager
	 *            消息管理器的接口
	 * @throws RemoteException
	 */
	public void configJobAgent(Remote agent) throws RemoteException;

	/**
	 * 配置任务运行的环境
	 * 
	 * @throws RemoteException
	 */
	public void configureTask(Serializable config) throws RemoteException;

	/**
	 * 指示任务开始的入口，分布式平台将通过该入口对具体任务进行调度
	 * 
	 * @throws RemoteException
	 */
	public void start(StatusReporter reporter) throws RemoteException;

	/**
	 * 通知该任务需要停止
	 * 
	 * @throws RemoteException
	 */
	public void end() throws RemoteException;

}
